package part15;

/**
 * @author wcj
 * @Date 2021/5/30 17:36
 * @Version 1.0
 */
public class Part1533 {
    public static void main(String[] args) {
        SubType s1 = new SubType();
        SubType s2 = new SubType();
        s1.setItem(s2);
        SubType s3 = s1.getItem();
        s1.f();
    }
}

/**
 * 循环泛型，即导出类不仅仅只是具有基类，同时还具有自己本身的类型，只不过这种类型以参数的形式存在于基类中
 */
class SubType extends BasicHolder<SubType> {
}

class BasicHolder<T> {
    T item;

    public void setItem(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    public void f() {
        System.out.println(item.getClass().getSimpleName());
    }
}
